import 'dart:convert';
import 'dart:io';
import '../../model/language.dart';
// import 'package:jfzh_product/util/permission.dart';
import 'sp_key.dart';
import 'package:flutter/cupertino.dart';
import 'package:get/get.dart';
import 'package:shared_preferences/shared_preferences.dart';
import '../../../http/request_register.dart';
// import 'package:package_info_plus/package_info_plus.dart';

/// @class : SpUtil
/// @date : 2021/08/19
/// @name : jhf
/// @description :键值对存储
class SpUtil {

  ///main文件删除更新信息
  // static removeAppUpgrade()async {

  //
  //   if (SpUtil.getHomeOneKey().isNotEmpty || Platform.isIOS) {
  //
  //     // PermissionRequest.manageExternalStorage((res){
  //     // bool res = await Permission.
  //
  //       // if(res){
  //         Get.find<SharedPreferences>().remove(SPKey.appName);
  //         Get.find<SharedPreferences>().remove(SPKey.packageName);
  //         Get.find<SharedPreferences>().remove(SPKey.version);
  //         Get.find<SharedPreferences>().remove(SPKey.buildNumber);
  //       // }
  //     // });
  //
  //
  //   }
  // }
  // // 存储更新信息
  // static saveAppupgrade(PackageInfo packageInfo ){
  //   if (SpUtil.getHomeOneKey().isNotEmpty || Platform.isIOS) {
  //
  //
  //     // PermissionRequest.manageExternalStorage((res){
  //     //   if(res){
  //         Get.find<SharedPreferences>().setString(
  //             SPKey.appName, packageInfo.appName);
  //         Get.find<SharedPreferences>().setString(
  //             SPKey.packageName, packageInfo.packageName);
  //         Get.find<SharedPreferences>().setString(
  //             SPKey.version, packageInfo.version);
  //         Get.find<SharedPreferences>().setString(
  //             SPKey.buildNumber, packageInfo.buildNumber);
  //       // }
  //     // });
  //
  //
  //   }
  // }
  //
  // static putHomeOneKey(String name) {
  //   Get.find<SharedPreferences>()
  //       .setString(SPKey.homeOneKey, name);
  // }
  //
  // static String getHomeOneKey() {
  //   SharedPreferences sp = Get.find<SharedPreferences>();
  //   try {
  //     var json = sp.getString(SPKey.homeOneKey);
  //     if (json == null) {
  //       return "";
  //     } else {
  //       return json;
  //     }
  //   } catch (e) {
  //     // debugPrint(e.toString());
  //     return "";
  //   }
  // }
  // static putSensorsAndBaiduKey(String name) {
  //   Get.find<SharedPreferences>()
  //       .setString(SPKey.sensorsAndBaiduKey, name);
  // }
  //
  // static String getSensorsAndBaiduKey() {
  //   SharedPreferences sp = Get.find<SharedPreferences>();
  //   try {
  //     var json = sp.getString(SPKey.sensorsAndBaiduKey);
  //     if (json == null) {
  //       return "";
  //     } else {
  //       return json;
  //     }
  //   } catch (e) {
  //     // debugPrint(e.toString());
  //     return "";
  //   }
  // }
  //
  // ///存储更新信息
  // static putAppUpgradeInfo( Map info) {
  //   Get.find<SharedPreferences>()
  //       .setString(SPKey.appUpData, jsonEncode(info));
  // }
  //
  //
  // //获取更新信息
  // static Map getAppUpgradeInfo() {
  //   SharedPreferences sp = Get.find<SharedPreferences>();
  //   try {
  //     var json = sp.getString(SPKey.appUpData);
  //     if (json == null) {
  //       return {};
  //     } else {
  //       return jsonDecode(json);
  //     }
  //   } catch (e) {
  //     debugPrint(e.toString());
  //     return {};
  //   }
  // }
  // ///删除存储更新信息
  // static deleteAppUpgradeInfo() {
  //   Get.find<SharedPreferences>().remove(SPKey.appUpData);
  // }
  //
  //
  //
  // ///更新用户信息，需要保存密码
  // ///[userInfo] 用户信息
  static notifyUserInfo(UserEntity userInfo) {
    var oldInfo = getUserInfo();

    SpUtil.deleteUserInfo();
    SpUtil.putUserInfo(userInfo);
  }

  ///删除存储用户信息
  static deleteUserInfo() {
    Get.find<SharedPreferences>().remove(SPKey.keyUserInfo);
  }

  ///存储用户信息
  ///[userInfo] 用户信息
  static putUserInfo(UserEntity userInfo) {
    Get.find<SharedPreferences>()
        .setString(SPKey.keyUserInfo, jsonEncode(userInfo.toJson()));
  }
  //
  // ///获取用户信息
  // ///[UserEntity] 用户信息
  static UserEntity? getUserInfo() {
    SharedPreferences sp = Get.find<SharedPreferences>();
    try {
      var json = sp.getString(SPKey.keyUserInfo);
      if (json == null) {
        return null;
      } else {
        return UserEntity.fromJson(jsonDecode(json));
      }
    } catch (e) {
      debugPrint(e.toString());
      return null;
    }
  }
  //
  ///存储语言
  ///[Language] 语言
  static updateLanguage(Language language) {
    Get.find<SharedPreferences>().remove(SPKey.language);
    Get.find<SharedPreferences>()
        .setString(SPKey.language, jsonEncode(language.toJson()));
  }

  ///获取语言选项
  ///[Language] 语言
  static Language? getLanguage() {
    SharedPreferences sp = Get.find<SharedPreferences>();
    try {
      var json = sp.getString(SPKey.language);
      if (json == null) {
        return null;
      } else {
        return Language.fromJson(jsonDecode(json));
      }
    } catch (e) {
      debugPrint(e.toString());
      return null;
    }
  }

  /// 搜索历史记录
  /// [word] 搜索记录
  static saveSearchHistory(String word) {
    var history = getSearchHistory();
    // if (history.contains(word)) {
    //   return;
    // }
    // 每次先删除一下 省了判断了
    history.remove(word);

    history.insert(0, word);
    if(history.length > 10){
      history.removeLast();
    }
    Get.find<SharedPreferences>().setStringList(SPKey.searchHistory, history);
  }

  ///清空搜索历史
  static void deleteSearchHistory() {
    Get.find<SharedPreferences>().remove(SPKey.searchHistory);
  }

  ///获取搜索历史记录
  static List<String> getSearchHistory() {
    SharedPreferences sp = Get.find<SharedPreferences>();
    try {
      var json = sp.getStringList(SPKey.searchHistory);
      if (json == null) {
        return [];
      } else {
        return json;
      }
    } catch (e) {
      debugPrint(e.toString());
      return [];
    }
  }

  ///浏览记录长度
  static int getBrowseHistoryLength() {
    return getBrowseHistory().length;
  }

  ///获取浏览历史记录
  static List<String> getBrowseHistory() {
    SharedPreferences sp = Get.find<SharedPreferences>();
    try {
      var json = sp.getStringList(SPKey.browseHistory);
      if (json == null) {
        return [];
      } else {
        return json;
      }
    } catch (e) {
      debugPrint(e.toString());
      return [];
    }
  }


}
